package org.ytoh.configurations.ui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.AbstractCellEditor;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import org.ytoh.configurations.Property;
/**
*
* @author ytoh
*/
public class PropertyCellEditor extends AbstractCellEditor implements TableCellEditor {
private Property property;
private JPanel panel;
public PropertyCellEditor(Property property) {
this.property = property;
panel = new JPanel(new BorderLayout());
}
public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, final int row, int column) {
property.setValue(value);
Component editorComponent = property.getEditorComponent();
editorComponent.validate();
panel.removeAll();
panel.add(editorComponent, BorderLayout.CENTER);
if(panel.getComponentListeners().length == 0) {
panel.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
table.setRowHeight(row, e.getComponent().getPreferredSize().height);
}
});
}
panel.setBackground(table.getBackground());
for (int i = 0, size = panel.getComponentCount(); i < size; i++) {
panel.getComponent(i).setBackground(table.getBackground());
}
return panel;
}
public Object getCellEditorValue() {
return this.property.getValue();
}
}